#列表和元组
#列表可以修改，元组不能修改

# #创建列表
# a=[]
# b=list()
#
# print(type(a))
# print(type(b))
#
# #使用[]创建列表,可以初始化列表的值
# a=[6,5,4,3]
# #打印列表
# print(a)
#
#
# #同一个列表中，可以存在不同类型的变量
# a=[1,'hello',True,[6,6,6]]
# print(a)
# #使用len求列表的长度
# print(len(a))
#
#
# #python支持下标为负数(a[-1]表示倒数第一个元素,a[-2]表示倒数第二个元素)
# print(a[-1])
# print(a[-2])



# #列表的切片操作
# #取列表的一部分,叫做列表的切片操作
# a=[1,2,3,4,5,6,7,8,9,0]
# #这里的1,6是下标,注意是左闭右开
# b=a[1:6]
# print(b)   #[2,3,4,5,6]
#
# #切片省略边界
# #省略开始边界,从列表的初始位置开始切片
# b=a[:6]
# print(b)
#
# #省略结束边界,切片直到列表的末尾
# b=a[6:]
# print(b)
#
# #省略开始边界和结束边界,得到列表本身
# b=a[:]
# print(b)
#
# #步长
# b=a[1:6:1]
# print(b)    #[2,3,4,5,6]
#
# b=a[1:6:2]
# print(b)    #[2,4,6]
#
# #步长为负数,表示从切片范围的末尾进行切片
# a=[1,2,3,4,5,6,7,8,9,0]
# #注意在步长为负数,也就是倒着切片时,切片的起始必须比末尾大，否则返回空列表
# b=a[6:2:-1]
# print(a)
# print(b)
#
# #切片中下标超出范围,不会报错,而是尽可能地获取元素
# b=a[1:100]
# print(b)


#列表的遍历
# a=[1,2,3,4,5,6,7,8,9,0]
# #只读(是把a里面的元素赋值给i，并不会改变列表a中的元素)
# for i in a:
#     print(i)
#
# #如果想要改变列表内容,需要使用下标对其进行操作
# for i in range(0,len(a)):
#     a[i]+=10
#
# print(a)


#列表的插入,查找,删除
# a=[1,2,3,4,5,6,7,8,9]
# #尾插
# a.append('hello')
# print(a)
# #在任意位置插入(如果输入的下标越界,会把要插入的元素放在列表的起始或者末尾)
# a.insert(1,'hello')
# print(a)


# a=[1,2,3,4,5,6,7,8,9]
# #1.使用in判断列表是否含有某个元素(有返回True，没有返回False)
# print(6 in a)
# print(10 in a)
# #2.使用index(如果存在，返回下标.如果不存在,会抛出异常)
# print(a.index(6))
# print(a.index(10))   #不存在,抛出异常


# a=[1,2,3,4,5,6,7,8,9]
# a.pop()  #尾删
# print(a)
#
# #pop还可以传元素下标,来指定删除某个元素
# a.pop(0)
# print(a)
#
# #remove，删除某个值
# a=['aa','bb','cc']
# a.remove('bb')
# print(a)

#列表的拼接
# a=[1,2,3,4]
# b=[5,6,7,8]
# #1.a+b
# c=a+b
# print(c)
# #2.extend
# a.extend(b)
# print(a)
# #3.a+=b
# a=[1,2,3,4]
# b=[5,6,7,8]
# a+=b
# print(a)

#a+=b的本质是a=a+b,(1.创建一个新的大的列表2.把a+b的值拷贝到新列表3.释放旧的列表a),与extend的直接拼接相比,是低效的


#元组
a=()
b=tuple()

print(type(a))
print(type(b))
#元组只读不修改